/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.ipartek.formacion.gestformwww.controlador;

import com.ipartek.formacion.gestformwww.modelo.ModeloMaterial;
import com.ipartek.formacion.gestformwww.modelo.beans.Material;
import com.ipartek.formacion.gestformwww.modelo.beans.excepciones.GestorFormacionExcepcion;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

/**
 *
 * @author Fran & Cris
 * Material se vincula con la tabla Libro
 */
public class ModificarMaterialAccion implements Accion {

    public AccionRouter ejecuta(HttpServlet servlet, HttpServletRequest request, HttpServletResponse response) {
        AccionRouter router = null;
        HttpSession sesion = request.getSession();
        AccionServlet as = (AccionServlet) servlet;
        ModeloMaterial modelo = (ModeloMaterial) servlet.getServletContext().getAttribute("ModeloMaterial");
        Material material = new Material();
        ArrayList<String> mensajes = new ArrayList<String>();
        ArrayList<String> errorm = new ArrayList<String>();
        int idMaterial = -1;
        boolean ejecutar = true;
        String matAnnio = null;
        String matPag = null;
        String matPVP = null;
        String matStock = null;
        String aleatorio = (String) sesion.getAttribute("aleatorioMaterial");

        if (aleatorio != null) {
            if (request.getParameter("aleatorioMaterial") != null) {
                if (request.getParameter("aleatorioMaterial").equals(aleatorio)) {
                    // Si se pulsa F5 o atras el aleatorio del request será igual al de la sesión.
                    // NO debe crease un material (ya se creo anteriormente)
                    ejecutar = false;
                } else {
                    sesion.setAttribute("aleatorioMaterial", request.getParameter("aleatorioMaterial"));
                }
            }
        } else {
            sesion.setAttribute("aleatorioMaterial", request.getParameter("aleatorioMaterial"));
        }

        if (sesion.getAttribute("usuario") == null) {
            router = new AccionRouter("inicio", false);
        } else {
            router = new AccionRouter("principal");
            //si hay libId recogemos el material de la base de datos
            if ((request.getParameter("libId") != null) && (!request.getParameter("libId").equals("0"))) {
                try {
                    idMaterial = Integer.parseInt(request.getParameter("libId"));
                    material = modelo.getMaterial(idMaterial);
                } catch (GestorFormacionExcepcion ex) {
                    Logger.getLogger(ModificarMaterialAccion.class.getName()).log(Level.SEVERE, null, ex);
                }
            } else {
                //si no lo creamos
                material = new Material();
            }
            //recogemos los datos de la pantalla y los guardamos en material
            material.setIsbn(request.getParameter("ISBN"));
            material.setLibAutor(request.getParameter("libAutor"));
            material.setLibEditorial(request.getParameter("libEditorial"));
            matAnnio = request.getParameter("libAño");
            //Comprobamos dato año correcto
            if (!Verificador.numeroValido(matAnnio, true)) {
                errorm.add("error-numero-incorrecto");
            } else {
                material.setLibAnyo(Integer.parseInt(request.getParameter("libAño")));
            }
            //comprobamos dato pag correcta
            matPag = request.getParameter("libPag");
            if (!Verificador.numeroValido(matPag, true)) {
                errorm.add("error-numero-incorrecto");
            } else {
                material.setLibPag(Integer.parseInt(request.getParameter("libPag")));
            }
            //comprobamos dato PVP correcto
            matPVP = request.getParameter("libPVP");
            if (!Verificador.numeroFloatValido(matPVP)) {
                errorm.add("error-numero-incorrecto");
            } else {
                material.setLibPVP(Float.parseFloat(request.getParameter("libPVP")));
            }

            matStock = request.getParameter("libStock");
            if (!Verificador.numeroValido(matStock)) {
                errorm.add("error-numero-incorrecto");
            } else {
                material.setLibCantidadAlu(Integer.parseInt(request.getParameter("libStock")));
            }

            material.setLibTitulo(request.getParameter("libTitulo"));
            material.setLibObserv(request.getParameter("libObserv"));

            //si hay libId modificamos el material
            if (request.getParameter("libId") != null && (!request.getParameter("libId").equals("0")) && ejecutar) {
                try {
                    modelo.modificarMaterial(material);
                    mensajes.add("mensaje-modificar-material");
                    sesion.setAttribute("mensajes", mensajes);

                } catch (GestorFormacionExcepcion ex) {
                    Logger.getLogger(ModificarMaterialAccion.class.getName()).log(Level.SEVERE, null, ex);
                }
            } else {
                //si no hay libId creamos un material nuevo
                try {
                    idMaterial = modelo.insertarMaterial(material);
                    mensajes.add("mensaje-crear-material");
                    sesion.setAttribute("mensajes", mensajes);
                    request.setAttribute("libId", idMaterial);
                } catch (GestorFormacionExcepcion ex) {
                    Logger.getLogger(ModificarMaterialAccion.class.getName()).log(Level.SEVERE, null, ex);
                }
            }

            try {
                router = as.getFactory().getAction(as.getNombreClaseRecurso("ver-modificar-material-accion"), servlet.getClass().getClassLoader()).ejecuta(servlet, request, response);
            } catch (ClassNotFoundException ex) {
                Logger.getLogger(VerModificarCandidatoAccion.class.getName()).log(Level.SEVERE, null, ex);
            } catch (InstantiationException ex) {
                Logger.getLogger(VerModificarCandidatoAccion.class.getName()).log(Level.SEVERE, null, ex);
            } catch (IllegalAccessException ex) {
                Logger.getLogger(VerModificarCandidatoAccion.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
        
        return router;
    }
    
}


